import java.util.Scanner;

public class demo2 {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            // 读取数组长度 N 和倍数 K
            int N = scan.nextInt();
            int K = scan.nextInt();
            // 创建长度为 N 的数组
            int[] arr = new int[N];
            // 读取数组元素
            for (int i = 0; i < N; i++) {
                arr[i] = scan.nextInt();
            }
            // 用于记录前缀和对 K 取余的结果的出现次数
            long[] remainderCount = new long[K];
            // 初始化余数为 0 的情况，即空数组的和为 0
            remainderCount[0] = 1;
            // 记录当前前缀和
            long prefixSum = 0;
            // 记录 K 倍区间的数量
            long sum = 0;
            // 遍历数组
            for (int i = 0; i < N; i++) {
                // 计算当前前缀和
                prefixSum += arr[i];
                // 计算当前前缀和对 K 取余的结果
                int remainder = (int) (prefixSum % K);
                // 累加余数相同的前缀和的组合数
                sum += remainderCount[remainder];
                // 更新余数的出现次数
                remainderCount[remainder]++;
            }
            // 输出 K 倍区间的数量
            System.out.println(sum);
            scan.close();
        }
    }

